/*
 * Node class
 *
 * Copyright 2009, Gerben van Veenendaal (http://www.gerbenvv.nl)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * See the GNU General Public License in the COPYING file at the
 * root directory of this project for more details.
 */

#ifndef _NODE_H
#define _NODE_H

#include "common.h"

namespace PhpTidyLib{

/* node types enumeration */
enum ENodeType {
	NT_TOKEN,
	NT_SHORT_COMMENT,
	NT_LONG_COMMENT,
	NT_NEWLINES
};

class CNode {
public:
	CNode();
	~CNode();

	void Append(CNode *, bool = false);
	void Append(string);
	void Append(char = ' ');

	void PrependNewline(int = 0, bool = false);

	void Prepend(string);
	void Prepend(char = ' ');

	void Surround(string);
	void Surround(char = ' ');

	void FormatLongComment(void);

	ENodeType type;

	CNode *next;
	uint line;
	uint newlines;
	string token;
};

/* appends a string */
inline void CNode::Append(string str) {
	/* append string */
	token += str;
}

/* appends a char */
inline void CNode::Append(char chr) {
	/* append char */
	token += chr;
}

/* prepends a string */
inline void CNode::Prepend(string str) {
	/* prepend string */
	token = str + token;
}

/* prepends a char */
inline void CNode::Prepend(char chr) {
	/* prepend char */
	token = chr + token;
}

/* surrounds node with string */
inline void CNode::Surround(string str) {
	/* surround with string */
	token = str + token + str;
}

/* surrounds node with a char */
inline void CNode::Surround(char chr) {
	/* surround with char */
	token = chr + token + chr;
}
}

#endif
